package com.jdk.demo.fileChannel.partRead;

import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

// read(ByteBuffer[] dsts, int offset, int length)方法的作用是将通道中当前位置的字节序列读入以下标为offset开始的ByteBuffer[]数组中的remaining剩余空间中，并且连续写入length个ByteBuffer缓冲区
// 1、offset：第一个缓冲区在缓冲区数组中的偏移量；必须为非负数并且不能大于dsts.length
// 2、length：要访问的最大缓冲区数；必须为非负数并且不能大于dsts.length-offset
// 3、具有同步性
public class Test6_1 {
	
	// 验证read方法是从通道的当前位置开始读取的；从通道读取的字节放入缓冲区的remaining空间中
	public static void main(String[] args) throws Exception {
		FileInputStream fileInputStream = new FileInputStream(new File("f.txt"));
		FileChannel fileChannel = fileInputStream.getChannel();
		fileChannel.position(1);
		
		ByteBuffer bytebuffer1 = ByteBuffer.allocate(7);
		bytebuffer1.position(1);
		bytebuffer1.limit(3);
		ByteBuffer bytebuffer2 = ByteBuffer.allocate(7);
		bytebuffer2.position(2);
		bytebuffer2.limit(5);
		ByteBuffer[] bufferArray = new ByteBuffer[]{bytebuffer1, bytebuffer2};
		
		fileChannel.read(bufferArray, 0, 2);
		fileChannel.close();
		fileInputStream.close();
		
		bytebuffer1.rewind();
		bytebuffer2.rewind();
		
		for (int i = 0; i < bufferArray.length; i++) {
			byte[] byteArray = bufferArray[i].array();
			for (int j = 0; j < byteArray.length; j++) {
				byte eachByte = byteArray[j];
				if(eachByte == 0){
					System.out.print(" 空格 ");
				}else{
					System.out.print((char)byteArray[j]);
				}
			}
			System.out.println();
		}
		// 输出" 空格 bc 空格  空格  空格  空格 "
		// 	   "空格  空格 def 空格  空格 "
	}

}
